package com.ruoyi.report.mapper;

import com.ruoyi.report.domain.ReportInformation;
import org.apache.ibatis.annotations.Param;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 报告信息Mapper接口
 * 
 * @author luguanqing
 * @date 2020-11-17
 */
public interface ReportInformationMapper 
{
    /**
     * 查询报告信息
     * 
     * @param id 报告信息ID
     * @return 报告信息
     */
    public ReportInformation selectReportInformationById(String id);

    /**
     * 查询报告信息列表
     * 
     * @param reportInformation 报告信息
     * @return 报告信息集合
     */
    public List<ReportInformation> selectReportInformationList(ReportInformation reportInformation);

    /**
     * 查询到期报告信息列表
     *
     * @param reportInformation 报告信息
     * @return 报告信息集合
     */
    public List<ReportInformation> selectExpirationTime(ReportInformation reportInformation);

    /**
     * 查询报告数量
     */
    public int selectReportInformationCount(@Param("state")String state);

    /**
     * 首页查询报告处理状态信息
     */
    List<Map<String, Object>> selectCountByStatus(String inspector);

    /**
     * 查询报告编号是否存在
     */
    int selectReportNumExits(String reportNum);


    /**
     * 新增报告信息
     * 
     * @param reportInformation 报告信息
     * @return 结果
     */
    public int insertReportInformation(ReportInformation reportInformation);

    /**
     * 根据日期范围查询数据量
     */
    List<Map<String, Object>> selectReportNumByDate(Integer dateLength);

    /**
     * 修改报告信息
     * 
     * @param reportInformation 报告信息
     * @return 结果
     */
    public int updateReportInformation(ReportInformation reportInformation);

    /**
     * 根据报告编号更新报告数据
     */
    public int updateReportInformationByReportNum(ReportInformation reportInformation);

    /**
     * 修改报告状态
     *
     * @param reportNum 报告编号，state 报告状态
     * @return 结果
     */
    public int updateReportStateByNum(@Param("reportNum")String reportNum, @Param("state")String state);

    /**
     * 首页统计分析报告情况
     */
    public List<HashMap<String, String>> selectCountByState(@Param("state")String state);

    /**
     * 修改报告信息根据报告id
     */
    public int updateReportInformationByBgbh(ReportInformation reportInformation);

    /**
     * 批量归档
     *
     * @param ids 报告id
     * @return 结果
     */
    public int updateBatchGd(@Param("filier")String filier, @Param("filiTime")String filiTime, @Param("array")String[] ids);

    /**
     * 批量归档
     *
     * @param ids 报告id
     * @return 结果
     */
    public int updateBatchDown(@Param("downer")String downer, @Param("downTime")String downTime, @Param("array")String[] ids);

    /**
     * 修改报告状态
     *
     * @param id 报告编号，state 报告状态
     * @return 结果
     */
    public int updateReportStateById(@Param("id")String id, @Param("state")String state);

    /**
     * 删除报告信息
     * 
     * @param id 报告信息ID
     * @return 结果
     */
    public int deleteReportInformationById(String id);

    /**
     * 批量删除报告信息
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deleteReportInformationByIds(String[] ids);

    /**
     * 批量删除报告信息
     *
     * @param reportNums 需要删除的数据ID
     * @return 结果
     */
    public int deleteReportInformationByNums(String[] reportNums);

    /**
     * 根据报告id和状态查询报告审批未通过原因
     *
     * @return 结果
     */
    public String selectReasonById(@Param("id")String id, @Param("state")String state);

    /**
     * 根据报告id查询报告原始信息
     */
    public String selectReportHistoryById(String id);

    /**
     * 根据报告id查询报告原始信息
     */
    public ReportInformation selectReportInformationByNum(String reportNum);

    /**
     * 根据委托号查询报告信息
     */
    public ReportInformation selectReportInformationByAgreementNum(String agreementNum);

    /**
     * 根据报告id批量查询报告编号
     */
    public String[] selectReportNumById(String[] ids);

    /**
     * 根据报告id批量查询报告信息
     */
    public List<ReportInformation> selectReportByIds(String[] ids);

    /**
     * 删除报告信息信息
     *
     * @param reportNum
     * @return 结果
     */
    int deleteReportInformationByReportNum(String reportNum);
}
